#ifndef MYSQL_MYSQL_SESSION_INFO_H
#define MYSQL_MYSQL_SESSION_INFO_H

#include <memory>
#include <odb/database.hxx>
#include <odb/mysql/database.hxx>
#include <string>
#include <vector>

#include "chat_session_info.hxx"
#include "database_factory.h"

namespace chat {
class ChatSessionInfoTable {
   public:
    ChatSessionInfoTable(const std::shared_ptr<odb::mysql::database>& db)
        : db_(db) {}

    bool insert(ChatSessionInfomation& chat_session_info);
    bool remove(const std::string& chat_session_id);
    bool remove(const std::string &user_id, const std::string &peer_id);

    /**
     * @brief 获取会话信息
     *
     * @param chat_session_id 会话id
     */
    ChatSessionInfomation sessionInfo(const std::string& chat_session_id);

    /**
     * @brief 获取用户的单聊会话信息
     *
     * @param user_id 用户id
     */
    std::vector<SingleSessionInfo> SingleSessionInfos(
        const std::string& user_id);

    /**
     * @brief 获取用户的群聊会话信息
     *
     * @param user_id 用户id
     */
    std::vector<GroupSessionInfo> groupSessionInfos(const std::string& user_id);

   private:
    std::shared_ptr<odb::mysql::database> db_ = nullptr;
};
using ChatSessionInfoTablePtr = std::shared_ptr<ChatSessionInfoTable>;
}  // namespace chat

#endif  // MYSQL_MYSQL_SESSION_INFO_H
